package util;

import java.io.*;
import java.util.*;

public class ObjectPlus implements Serializable{
	protected static Hashtable ekstensje = new Hashtable();
	
	public ObjectPlus(){
		Vector ekstensja = null;
		Class klasa = this.getClass();
		
		if(ekstensje.containsKey(klasa)){
			ekstensja = (Vector) ekstensje.get(klasa);
		}
		else{
			ekstensja = new  Vector();
			ekstensje.put(klasa, ekstensja);
		}
		ekstensja.add(this);
	}
	
	public static void zapiszEkstensje(ObjectOutputStream stream) throws IOException{
		stream.writeObject(ekstensje);
	}
	
	public static void odczytajEkstensje(ObjectInputStream stream) throws IOException{
		try {
			ekstensje = (Hashtable) stream.readObject();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void pokazEkstensje(Class klasa) throws Exception{
		Vector ekstensja = null;
		if(ekstensje.containsKey(klasa)){
			ekstensja = (Vector) ekstensje.get(klasa);
		}else{
			throw new Exception("Nieznana klasa " + klasa);
		}
		System.out.println("Ekstensja klasy: " + klasa.getSimpleName());
		for(Object obiekt : ekstensja){
			System.out.println(obiekt);
		}
	}
        
        public static Vector pobierzEkstensje(Class klasa) throws Exception{
		Vector ekstensja = null;
		if(ekstensje.containsKey(klasa)){
			ekstensja = (Vector) ekstensje.get(klasa);
		}else{
                        throw new Exception("Nieznana klasa " + klasa);
		}
		return ekstensja;
	}
        
    public static boolean czyIstnieje(Class klasa){
        if(ekstensje.containsKey(klasa)){
		return true;
        }else{
		return false;
        }
    }
}
